/*
 Trabajo Practico 3 Ejercicio 4
 Cliente TCP
 Segunda Entrega

 - Integrantes:
        - Barrera, Lourdes              DNI: 33306634
        - Martinez, Guillermo   		DNI: 34510461
        - Reyes, Leandro                DNI: 34213699
        - Rodriguez, Lucas              DNI: 34265017
*/

#include "../defines.c"

// Handler que finaliza cliente
void finalizar(int);

int socket_descriptor;	    	// Socket

int main(int argc, char *argv[])
{
	char timest[TAM_MSJ]; 			// Cliente: dd/mm/yy hh:mm:ss
	char msj[TAM_MSJ];				// Mensaje
	struct hostent *data_host;		// Estructura del host
	struct sockaddr_in socketdir;   // Direccion socket servidor
    int puerto;
    char ip_srv[30];
	FILE* arch;
	
	if((arch = fopen("config/client_cfg","rt")) == NULL)
	{
		printf("No se puede leer configuración\n");
		exit(1);
	}
	
	fscanf(arch,"IP = %s\nPUERTO = %d",ip_srv,&puerto);

	// Obtenemos la estructura de datos del host
	if((data_host = gethostbyname(ip_srv)) == 0)
    {
		perror("gethosbyname");
		exit(1);
	}

	// Estructura con información del host
	socketdir.sin_family = AF_INET;
	socketdir.sin_addr.s_addr = ((struct in_addr *) (data_host->h_addr))->s_addr;
	socketdir.sin_port = htons(puerto);

	// Obtenemos un socket tipo internet
	if((socket_descriptor = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
		perror("socket");
		exit(1);
	}

	// Manejar la finalizacion
	signal(SIGUSR1,finalizar);
	signal(SIGINT,finalizar);
	signal(SIGTERM,finalizar);

	// Nos conectamos al PUERTO en el HOST
	if(connect(socket_descriptor, (struct sockaddr *)&socketdir, sizeof(socketdir)) == -1)
    {
		perror("connect");
		exit(1);
	}

	// Obtenemos la fecha. servidor
	timestamp(timest);

	// Enviamos el msj al PUERTO del servidor en la máquina HOST
	strcpy(msj, timest);
	printf("Envio: %s\n", msj);
	if(send(socket_descriptor, msj, sizeof(msj), 0) == -1)
    {
		perror("sedirnd");
		exit(1);
	}

	// Espera respuesta
	if(recv(socket_descriptor, msj, sizeof(msj), 0) == -1)
    {
		perror("recv");
		exit(1);
	}

    // Cerrar socket
    close(socket_descriptor);

    printf("Tiempo del server: %s\n", msj);

	return 1;
}

void finalizar(int signal)
{
	close(socket_descriptor);
	printf("Cliente finalizado por el usuario\n");
	exit(0);
}
